package org.qq.tv.web.jsoup;
import jakarta.xml.bind.DatatypeConverter;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.qq.tv.web.mapper.pojo.task.UpTaskDate;
import org.qq.tv.web.tools.Baseb64;

/*
 *四虎网站解析 HTML 数据实现类
 */
public class SihuHtml {
    /**
     * 解析 分组
     *
     * @param isihu 解析过程调用接口
     * @param date  解析 任务数据
     */
    public static void group(IsihuHtml isihu, UpTaskDate date) {
        try {
            //网络数据
            Document doc = Jsoup.parse(date.getHtmlDate());
            //分分类
            // 分组 区域快 div
            Elements menu = doc.getElementsByClass("menu clearfix");
            // 分组 一级标签 多个 dl
            Elements dlmenu = menu.first().getElementsByTag("dl");
            //分类组
            for (Element dl_a : dlmenu) {
                // 一级 分组
                String gstr = dl_a.getElementsByTag("dt").first().getElementsByTag("a").toString();
                // 获取 base64 字符串 分组名
                String gbase64 = gstr.substring(gstr.indexOf("document.write(d('") + 18, gstr.indexOf("'));</script>"));
                //分组路径
                String gpath = gstr.substring(gstr.indexOf("data-url=\"") + 10, gstr.indexOf("/\"><script"));
                if (gbase64.equals("5Zu+5paH") == false) {
                    String gch = Baseb64.decode(gbase64);
                    //封装一级分组数据
                    date.getTableGroups().setWebId(date.getTableWeb().getId());
                    date.getTableGroups().setName(gch);
                    date.getTableGroups().setPath(gpath);
                    isihu.sihuGroup(date);

                    //System.MyAsync.println(gch+" "+gpath);
                    // 二级 分类组 标签
                    for (Element ta : dl_a.getElementsByTag("dd")) {
                        String sat = ta.getElementsByTag("a").toString();
                        // 获取 base64 字符串 分组名
                        String tbase64 = sat.substring(sat.indexOf("document.write(d('") + 18, sat.indexOf("'));</script>"));
                        String tch = Baseb64.decode(tbase64);
                        //分组路径
                        String tpath = sat.substring(sat.indexOf("data-url=\"") + 10, sat.indexOf("/\"><script"));
                        //二级分组数据表 封装
                        date.getTableGroupsItem().setGroupId(date.getTableGroups().getId());
                        date.getTableGroupsItem().setName(tch);
                        date.getTableGroupsItem().setPath(tpath);
                        isihu.sihuGroupItem(date);
                        //System.MyAsync.println(tch+"  "+tpath);


                    }
                }
            }
        } catch (Exception e) {

        }
    }

    /**
     * 四虎网站分组条目计算拥有多少页面
     *
     * @param isihu 调用接口
     * @param date  解析数据
     * @return
     */
    public static boolean groupItemCount(IsihuHtml isihu, String date) {
        try {
            Document doc = Jsoup.parse(date);
            //读取下一页的标签位置
            Element pc_pagination = doc.getElementsByClass("pc_pagination").first();
            //获取最后一页链接数量
            String href = pc_pagination.getElementsByTag("a").last().attr("href");//获取 a 标签 属性
            // System.out.println(href);
            //切割视频地址
            int count = Integer.parseInt(href.substring(href.indexOf("index_") + 6, href.indexOf(".html")));

            isihu.groupItemCount(href, count);
            //System.out.println(count);

        } catch (Exception e) {
            //https://www.t4hyx.com/onlyfans
            isihu.groupItemCount("/onlyfans", 0);
            return false;
        }
        return true;
    }

    /**
     * 四虎网站html解析 视频条目页面解析
     *
     * @param isihu 解析数据接口调用
     * @param date  解析数据 html
     * @return
     */
    public static boolean videoItem(IsihuHtml isihu, String date) {
        String crow = "row col5 clearfix";
        String tdd = "dd";
        String ta = "a";
        String ah = "href";
        String th = "h3";
        String tscript = "script";
        String utf8 = "utf-8";

        String htmlPath = null;
        String vname = null;
        Document doc = Jsoup.parse(date);

        Elements dde = doc.getElementsByClass(crow).get(0).getElementsByTag(tdd);
        for (Element dd : dde) {
            try {
                Element a = dd.getElementsByTag(ta).get(0);
                // html 解析
                htmlPath = a.attr(ah);
                // System.out.println(htmlPath);
                String sname = null;
                try {
                    //视频昵称
                    sname = a.getElementsByTag(th).get(0).getElementsByTag(tscript).get(0).toString();
                    //截取 字符 <script type="text/javascript">document.write(d('6Iy25rC0'));</script>
                    int i = sname.indexOf("document.write(d('") + 18;
                    int n = sname.indexOf("'));</script>");
                    sname = sname.substring(i, n);

                    //ase64Str 待解码字符串   解码
                    byte[] base64Bytes = DatatypeConverter.parseBase64Binary(sname);
                    vname = new String(base64Bytes, utf8);
                } catch (Exception e) {
                    sname = a.getElementsByTag(th).get(0).getElementsByTag(th).get(0).text();
                    System.out.println(sname);
                    System.out.println("昵称 解析 失败");
                }

                //System.out.println(vname);
            } catch (Exception e) {
                System.out.println("html 解析 失败");
            }
        }
        isihu.videoItem(htmlPath, vname);
        return true;
    }

    /**
     * 解析四虎 网站视频播放页面
     * 获取视频基本信息
     * 1 uir m3u8播放地址
     * 2 tmp 视频上传时间
     * 3 name 视频昵称
     * 4 视频下载链接
     *
     * @param isihu 解析数据接口调用
     * @param date  解析数据 html
     */
    public static void videoMessage(IsihuHtml isihu, String date) {
        Document doc = Jsoup.parse(date);
        String namem3u8 = null;
        String mp4Path = null;
        String update = null;
        String vname = null;

        String tscript = "script";
        //m3u8 字符开始位置
        String iplay = "playUrl=\"//\"+iplay+\"";
        //m3u8 字符结束位置
        String endvar = "\";var";
        String cdownload = "download";
        String tinput = "input";
        try {
            //m3u8 播放视频路径
            for (Element element : doc.getElementsByTag(tscript)) {
                namem3u8 = element.toString();
                int s = namem3u8.lastIndexOf(iplay);
                if (s != -1) {
                    int n = namem3u8.indexOf(endvar);
                    namem3u8 = namem3u8.substring(s + 20, n);
                    System.out.println(namem3u8);
                }
            }
        } catch (Exception e) {
            System.out.println("m3u8 播放视频路径 失败");
        }
        try {
            // 下载地址
            Element input = doc.getElementsByClass(cdownload).get(0);
            mp4Path = input.getElementsByTag(tinput).get(0).attr("value");
            System.out.println(mp4Path);
        } catch (Exception e) {
            System.out.println("下载地址    失败");
        }
        try {
            //视频 上传时间
            update = doc.getElementsByClass("pannel clearfix").get(1).getElementsByTag("p").get(1).text();

        } catch (Exception e) {
            System.out.println("解析视频上传时间失败");
        }

        try {

            //视频名称 pannel clearfix
            Element pannel = doc.getElementsByClass("pannel clearfix").get(1);
            //视频昵称
            String sname = pannel.getElementsByTag("script").get(0).toString();
            //截取 字符 <script type="text/javascript">document.write(d('6Iy25rC0'));</script>
            int i = sname.indexOf("document.write(d('") + 18;
            int n = sname.indexOf("'));</script>");
            String ba = sname.substring(i, n);
            //ase64Str 待解码字符串   解码
            byte[] base64Bytes = DatatypeConverter.parseBase64Binary(ba);
            // byte[] 转 String
            vname = new String(base64Bytes, "utf-8").substring(3);

        } catch (Exception e) {
            System.out.println("解析视频昵称  失败");
        }
        isihu.videoMessage(vname, update, mp4Path, namem3u8);
    }

}
